/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package accesoDatos;

/**
 *
 * @author user
 */

import java.sql.*;
import java.util.Vector;
import logica.*;
import logica.Estudiante;

public class DAOEstudiante {
    
    private FachadaBD fachada;
    
    public DAOEstudiante(){
        fachada =  new FachadaBD();
    }
    
    public int guardarEstudiante(Estudiante e){
        String sql="INSERT INTO estudiante (id_aspirante,nombre,telefono,direccion,e_mail,cod_prog) VALUES("
                + e.getId() + "," + e.getNombre() + "," + e.getTelefono() + ","
                + e.getDireccion() + "," + e.getEmail() + "," + e.getPrograma() + ")";
        
        try{
            Connection c=fachada.conectar();
            Statement sentencia=c.createStatement();
            int numFilas= sentencia.executeUpdate(sql);
            fachada.desconectar(c);
            System.out.println("Estudiante guardado y conexion cerrrada");
            return numFilas;
        }
        catch(SQLException ex){}
        catch(Exception ex){}
        return -1;
    }
    
    public Estudiante consultarEstudiante(String codEst){
        
        Estudiante estudiante= new Estudiante();
        
        String consulta_sql = "SELECT * FROM estudiante WHERE cod_est="+codEst;
        
        try{
            Connection c= fachada.conectar();
            Statement sentencia = c.createStatement();
            ResultSet res=sentencia.executeQuery(consulta_sql);
            
            while(res.next()){
                
                estudiante.setCodigo(res.getString(1));
                estudiante.setId(res.getString(2));
                estudiante.setNombre(res.getString(3));
                estudiante.setTelefono(res.getString(4));
                estudiante.setDireccion(res.getString(5));
                estudiante.setEmail(res.getString(6));
                estudiante.setProeficiencia(res.getBoolean(7));
                estudiante.setPrograma(res.getString(8));
                estudiante.setGrupo(res.getString(8));
            }
            
            c.close();
            System.out.println("estudiante consutlada y Conexion cerrada");
            return estudiante;
        }
        catch(SQLException e){}
        catch(Exception e){}
                
        return null;
    }
    
    public Estudiante verificarEstudiante(String user,String pass){
        Estudiante est=null;
        String sql = "SELECT * FROM estudiante "
                + "WHERE usuario='" + user + "' AND passwd='" + pass + "'";
        
       try{
            Connection c= fachada.conectar();
            Statement sentencia = c.createStatement();
            ResultSet res=sentencia.executeQuery(sql);
            
            while(res.next()){
                est= new Estudiante();
                est.setCodigo(res.getString(1));
                est.setNombre(res.getString(3));
                est.setUsuario(res.getString(10));
                est.setPassword(res.getString(11));
            }
            fachada.desconectar(c);
        }
        catch(SQLException e){}
        catch(Exception e){}
       return est;
    }
    
    public int matricularAsignatura(String cod_est, String cod_asig, String per){
        
        String sql = "INSERT INTO matricula (cod_est,cod_asig,periodo,estado) VALUES("
                        + cod_est + "," + cod_asig + "," + per + ",MATRICULADA)";
        
        try{
            
            Connection c = fachada.conectar();
            Statement sentencia = c.createStatement();
            int numFilas = sentencia.executeUpdate(sql);
            fachada.desconectar(c);
            System.out.println("Asignatura matriculada y conexion cerrada");
            return numFilas;
        }
        catch(SQLException e){}
        catch(Exception e){}
        return -1;
    }
    
    public double obtenerPromedioAcumulado(String cod_est){
        
        String sql = "SELECT AVG(calificacion) FROM matricula WHERE cod_est='" + cod_est + "' AND estado='MATRICULADA'";
        System.out.println(sql);
        double promedio=-1;
        try{
            Connection c = fachada.conectar();
            Statement sentencia = c.createStatement();
            ResultSet res = sentencia.executeQuery(sql);
            
            if(res.getRow()==1){
                res.next(); 
                promedio=res.getDouble(1);
            }
        }
        catch(SQLException e){}
        catch(Exception e){}
        return promedio;
    }
    
    public int obtenerAsignaturasPerdidas(String cod_est){
        
        int ap=-1;
        String sql = "SELECT COUNT(calificacion) FROM matricula WHERE cod_est='" + cod_est + "' AND calificacion<2.96"
                        + " AND estado='MATRICULADA'";
        System.out.println(sql);
         System.out.print("nada");
        
        try{
            Connection c = fachada.conectar();
            Statement sentencia = c.createStatement();
            ResultSet res = sentencia.executeQuery(sql);
            
            if(res.getRow()==1){
                res.next();
                ap=res.getInt(1);
            }
        }
        catch(SQLException e){}
        catch(Exception e){}
        
        return ap;
    }
 
    public Vector<Estudiante> estudianteGrupo(String cod_grupo){
        Vector reporte = new Vector(1,1);
        
        String consulta_sql = "SELECT cod_est,nombre FROM estudiante WHERE cod_grupo_inves='" +cod_grupo +"'";
        try{
            Connection c= fachada.conectar();
            Statement sentencia = c.createStatement();
            ResultSet res=sentencia.executeQuery(consulta_sql);
            
            while(res.next()){
                Estudiante es = new Estudiante();
                es.setCodigo(res.getString(1));
                es.setNombre(res.getString(2));
                
                reporte.add(es);
            }
            
            fachada.desconectar(c);
            System.out.println("Estudiante consultado y conexion cerrada");
            return reporte;
        }
        catch(SQLException e){System.out.println("estoy en la exception SQL");}
        catch(Exception e){System.out.println("estoy en la exlecion padre"+e);}
        
        return null;
    }
    
    public Vector<Estudiante> estudianteMaestria(){
        Vector reporte = new Vector(1,1);
        
        String consulta_sql = "SELECT cod_est,id_aspirante,nombre FROM estudiante WHERE cod_est NOT IN (SELECT cod_est FROM est_doctorado)";
        try{
            Connection c= fachada.conectar();
            Statement sentencia = c.createStatement();
            ResultSet res=sentencia.executeQuery(consulta_sql);
            
            while(res.next()){
                Estudiante es = new Estudiante();
                es.setCodigo(res.getString(1));
                es.setId(res.getString(2));
                es.setNombre(res.getString(3));
                
                reporte.add(es);
            }
            
            fachada.desconectar(c);
            System.out.println("Estudiante consultado y conexion cerrada");
            return reporte;
        }
        catch(SQLException e){System.out.println("estoy en la exception SQL");}
        catch(Exception e){System.out.println("estoy en la exlecion padre"+e);}
        
        return null;
    }

    
}